#include "AudioAsset.h"
//#include <windows.h>
//#include <mmsystem.h>
//
//#pragma comment(lib, "WINMM.lib")

AudioAsset::AudioAsset(const std::string& id, const std::string& path)
    : Asset(id, AssetType::Audio), m_path(path)
{
}

AudioAsset::~AudioAsset()
{
    Unload();
}

bool AudioAsset::Load()
{
    if (m_isLoaded)
        return true;

    m_isLoaded=AudioManager::getInstance().load(m_id, m_path);


    return m_isLoaded;
}

void AudioAsset::Unload()
{
    if (!m_isLoaded)
        return;

    AudioManager::getInstance().unload(m_id);

    m_isLoaded = false;
}

bool AudioAsset::play(bool loop) const
{
    if (!m_isLoaded)
        return false;
    setLoop(loop);
    return AudioManager::getInstance().play(m_id);
}

bool AudioAsset::pause() const
{
    if (!m_isLoaded)
        return false;

    return AudioManager::getInstance().pause(m_id);
}

// 重新开始
bool AudioAsset::restart() {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().restart(m_id);
}
// 设置循环播放
bool AudioAsset::setLoop(bool loop) const{
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().setLoop(m_id,loop);
}

// 音量控制方法
// 设置音量 0-100
bool AudioAsset::setVolume(float volume) {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().setVolume(m_id,volume);
}
// 获取音量
float AudioAsset::getVolume() const {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().getVolume(m_id);
}

// 淡入淡出控制方法
// 淡入
bool AudioAsset::fadeIn(float durationSeconds) {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().fadeIn(m_id,durationSeconds);
}
// 淡出
bool AudioAsset::fadeOut(float durationSeconds) {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().fadeOut(m_id,durationSeconds);
}

// 状态查询方法
// 检查是否成功初始化
bool AudioAsset::isInitialized() const {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().isInitialized(m_id);
}
//检查是否正在播放
bool AudioAsset::isPlaying() const{
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().isPlaying(m_id);
}
//检查是否循环播放
bool AudioAsset::isLooping() const {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().isLooping(m_id);
}
//获取音频总时长
float AudioAsset::getDuration() const {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().getDuration(m_id);
}
//获取当前播放位置
float AudioAsset::getPlayingOffset() const {
    if (!m_isLoaded)
        return false;
    return AudioManager::getInstance().getPlayingOffset(m_id);
}